home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The CICA Windows Explosion!
/
The CICA Windows Explosion! - Disc 2.iso
/
programr
/
dpmigcc5.zip
/
RSX
/
SOURCE
/
ASM16
/
SWITCH.ASM
< prev
next >
Wrap
Assembly Source File
|
1994-05-27
|
2KB
|
82 lines
INCLUDE REGS386.INC
INCLUDE TRANS.INC
.386p
DGROUP group _DATA
_DATA segment word public 'DATA' use16
extrn _cs16real: word
extrn _ds16real: word
trs TRANS <> ; translation struct for r-mode switch
goProtectMode dd ? ; Location of far call routine
_DATA ends
_TEXT segment byte public 'CODE' use16
assume cs:_TEXT,ds:DGROUP
;
; void RealModeSwitch(void)
;
public _RealModeSwitch
_RealModeSwitch proc near
pop bx ;Where to return from this procedure
movzx ebx, bx
movzx esi, si
movzx edi, di
movzx ebp, bp
mov dword ptr trs.T_EBX, ebx
mov dword ptr trs.T_ESI, esi
mov dword ptr trs.T_EDI, edi
mov dword ptr trs.T_EBP, ebp
mov word ptr trs.T_SP, sp
sub word ptr trs.T_SP, 512
mov word ptr trs.T_IP, offset _TEXT:@@realModeEntry
mov word ptr trs.T_FLAGS, 0202h
mov ax, _cs16real
mov word ptr trs.T_CS, ax
mov ax, _ds16real
mov word ptr trs.T_DS, ax
mov word ptr trs.T_ES, ax
mov word ptr trs.T_SS, ax
xor ebx, ebx
xor ecx, ecx
push ds
pop es
mov di, offset DGROUP:trs
movzx edi, di
mov ax,0301h
int 31h
mov esi, dword ptr trs.T_ESI
mov edi, dword ptr trs.T_EDI
mov ebp, dword ptr trs.T_EBP
mov sp, word ptr trs.T_SP
jmp word ptr trs.T_EBX ; stored by DPMIprotectedMode() below
@@realModeEntry:
pop goProtectMode ; Address to return from real mode callback
push bx ; Address stored in realRegs above
ret ; RealModeSwitch()
_RealModeSwitch endp
;
; void ProtectedModeSwitch(void)
;
public _ProtectedModeSwitch
_ProtectedModeSwitch proc near
pop bx ;Return point (will be used in
mov dword ptr trs.T_EBX, ebx ; RealModeSwitch above)
mov dword ptr trs.T_ESI, esi
mov dword ptr trs.T_EDI, edi
mov dword ptr trs.T_EBP, ebp
mov word ptr trs.T_SP, sp
jmp goProtectMode ;Saved retf address from real mode callback
_ProtectedModeSwitch endp
_TEXT ends
end